home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 March
/
EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso
/
docs
/
corsoguide
/
interruptdoc-11.txt
< prev
next >
Wrap
Text File
|
1996-02-22
|
2KB
|
52 lines
Il server di interrupt
Alla chiamata del server di interrupt vengono passati dal sistema una
serie di importanti informazioni dal sistema in particolari registri (per
questo si consiglia di scrivere il codice delle interrupt in assembler).
I parametri dell'interrupt hardware diretta (che viene installata con
SetIntServer) sono:
D0 - scratch (viene utilizzato dal sistema quindi il suo valore verrà
mutato)
D1 - contiene i valori di INTENAR (il registro che indica quali interrupt
sono abilitate) e INTREQR (il registro che indica quali interrupt si
sono verificati) "and"ati fra loro, ed indica quali interrupt si sono
verificate effettivamente.
A0 - inidirizzo base del set di chip custom.
A1 - valore presente nel campo di is_Data dell'interrupt (quindi il
puntatore alle informazioni che l'installatore dell'interrupt vuole
passare)
A5 - è usato come un vettore al tuo codice di interrupt
A6 - punta alla base della libreria exec; serve per la chiamata di funzioni
exec
Un codice di interrupt diretto deve ritornare con RTS (non con RTE come si
dovrebbe fare per un installazione dell'interrupt diretto via hardware);
prima di uscire bisogna cancellare il bit dell'interrupt relativo nel
registro INTREQ per indicare che l'interrupt è stata servita.
I parametri dell'interrupt hardware installata con AddIntVector:
D0 - scratch
D1 - scratch
A0 - scratch (tranne alcuni casi)
A1 - valore del campo is_Data nella struttura Interrupt
A5 - puntatore al codice di interrupt (scratch)
A6 - scratch
in questo caso dato che l'interrupt non è direttamente connessa al sistema
non vi è bisogno di resettare il bit nel registro INTREQ; vi è però la
possibilità di saltare tutte le interrupt che vengono dopo nella lista dei
servers ponendo il flag Z a 1 (cancellato); nel caso in cui vogliate far
seguire l'esecuzione a tutte le interrupt della lista bisogna settare il
flag Z (porre a 0); il modo migliore per pilotare il flag Z è questo:
Setzflag_Chiamalaprossima:
MOVEQ #0,D0
RTS
Clearzflag_finiscilacatena:
MOVEQ #1,D0
RTS
I server di interrupt di questo tipo (installati con AddIntServer) possono
essere attivati solo per le seguenti interrupt: PORTS, COPER, VERTB, EXTER e
NMI.